package com.market.mapper;

import com.market.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface UserMapper{

    /**
     * 根据用户编码查询用户
     */
    User getByUserCode(String userCode);
    
    /**
     * 查询所有用户
     */
    List<User> findAll();
    
    /**
     * 根据ID查询用户
     */
    User findById(@Param("id") Long id);
    
    /**
     * 分页查询用户
     */
    List<User> findByPage(
            @Param("userName") String userName,
            @Param("userCode") String userCode,
            @Param("offset") Integer offset,
            @Param("pageSize") Integer pageSize);
    
    /**
     * 统计符合条件的用户总数
     */
    int countByCondition(
            @Param("userName") String userName,
            @Param("userCode") String userCode);
    
    /**
     * 添加用户
     */
    int add(User user);
    
    /**
     * 更新用户信息
     */
    int update(User user);
    
    /**
     * 更新用户状态
     */
    int updateStatus(@Param("id") Long id, @Param("status") Integer status);
    
    /**
     * 更新用户状态（带修改者和修改时间）
     */
    int updateStatusWithModifier(@Param("id") Long id, @Param("status") Integer status, 
                                 @Param("modifyBy") Long modifyBy, @Param("modifyDate") Date modifyDate);
    
    /**
     * 更新用户密码
     */
    int updatePassword(User user);
    
    /**
     * 删除用户
     */
    int deleteById(@Param("id") Long id);

    /**
     * 根据角色ID查询用户数量
     */
    int countByRoleId(@Param("roleId") Long roleId);
}
